package cn.mdmbct.douyin.data.service.interfaces;

import cn.mdmbct.douyin.common.enums.DataApiDataType;
import cn.mdmbct.douyin.common.exception.ApiCallException;
import cn.mdmbct.douyin.common.proxy.annotations.Mapping;
import cn.mdmbct.douyin.common.proxy.annotations.RequestParam;
import cn.mdmbct.douyin.data.response.item.DataItemBaseRes;
import cn.mdmbct.douyin.data.response.item.DataItemLikeRes;

/**
 * @author mdmbct  mdmbct@outlook.com
 * @date 2021/5/5 下午23:20
 * @modified mdmbct
 * @since 1.0
 */
public interface ItemDataService {

    /**
     * <a href="https://open.douyin.com/platform/doc/6848798407369164803">获取视频基础数据</a>
     * <p>
     * Scope: `data.external.item`需要申请权限需要用户授权<p>
     * 该接口用于获取视频基础数据。
     * <p>
     * 注意：
     * <p>
     * 用户首次授权应用后，需要第二天才会产生全部的数据；<p>
     * 注意参数中item_id作为url参数时，必须encode，只对item_id单独进行encode
     *
     * @param openId 通过/oauth/access_token/获取，用户唯一标志
     * @param itemId item_id，仅能查询access_token对应用户上传的视频
     * @return
     */
    @Mapping("/data/external/item/base")
    DataItemBaseRes.DataItemBaseResData getItemBase(@RequestParam("open_id") String openId,
                                                    @RequestParam("item_id") String itemId) throws ApiCallException;

    /**
     * <a href="https://open.douyin.com/platform/doc/6848798407369230339">获取视频点赞数据</a> <br>
     * Scope: `data.external.item`需要申请权限需要用户授权
     * 该接口用于获取视频点赞数据。
     * <p>
     * 注意：
     * <p>
     * 用户首次授权应用后，需要第二天才会产生全部的数据；
     * 注意参数中item_id作为url参数时，必须encode，只对item_id单独进行encode。
     * 三十天内创建的视频，才会返回数据。
     *
     * @param openId 通过/oauth/access_token/获取，用户唯一标志
     * @param itemId item_id，仅能查询access_token对应用户上传的视频
     * @param dataType 近7/15天；输入7代表7天、15代表15天 {@link DataApiDataType}
     * @return
     */
    @Mapping("/data/external/item/like/")
    DataItemLikeRes.DataItemLikeResData getItemLike(@RequestParam("open_id") String openId,
                                                    @RequestParam("item_id") String itemId,
                                                    @RequestParam(value = "data_type", method = "getDays") DataApiDataType dataType) throws ApiCallException;


}
